package com.itdct.onflow.core.annotation


/**
 * @author Zhouwx
 * @date 2025/7/8 23:09:01
 * @version 1.0
 * @description 列信息，用于生成建表语句
 */
@MustBeDocumented
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FIELD, AnnotationTarget.ANNOTATION_CLASS)
annotation class Column(
    /**
     * 指定列名，否则为字段名的下划线模式
     * @return
     */
    val value: String = "",

    /**
     * 字段注释
     * @return
     */
    val comment: String,

    /**
     * 字段长度，仅对String和double，bigDecimal有效
     */
    val length: Int = -1,

    /**
     * 是否唯一，会创建唯一索引，单字段唯一索引
     */
    val unique: Boolean = false,

    /**
     * 是否允许为空
     */
    val nullable: Boolean = true,

    /**
     * 默认值
     */
    val defaultValue: String = "",

    /**
     * 小数点位数
     */
    val decimal: Int = 0,

    /**
     * 是否为该列添加索引，单字段索引
     */
    val indexed: Boolean = false,

    /**
     * 是否为该列添加主键
     */
    val primaryKey: Boolean = false,

    /**
     * 是否为该列添加自增主键
     */
    val autoincrement: Boolean = false,

    /**
     * 字段排序
     */
    val sort: Int ,

    /**
     * 是否为虚拟列，该列不会生成数据库字段，仅用于查询返回
     */
    val virtual: Boolean = false,

    /**
     * 是否可选择，如果为true，则会在Service和Controller中生成对应的下拉选接口
     */
    val forSelect: Boolean = false,

    /**
     * 该字段是否支持排序，如果为true，则会在VuePage页面中生成排序按钮
     */
    val sortable: Boolean = true,

    /**
     * 排序规则
     */
    val collate: String = "utf8mb4_unicode_ci",

    /**
     * 字符集
     */
    val charset: String = "utf8mb4",

    /**
     * 联合索引字段
     */
    val relateIndex: Array<String> = [],

    /**
     * 联合唯一索引
     */
    val relateUnique: Array<String> = []
)